Expandable index with pages to store object records

ABSTRACT

Implementations of the disclosure describe an expandable index including pages that may store object records. The index may be divided into buckets, and each bucket may be associated with pages from a pool of unused pages shared by the buckets. A table or log may be used to maintain a dynamic list of all unused pages. It may also maintain a list of pages currently associated with buckets. As pages are linked to or unlinked from a bucket, the table or log may be updated to reflect that a page has been linked to a bucket or that a page that is no longer linked to a bucket belongs to the pool of unused pages. As additional storage media are added to the system, additional pages may be added to the pool of the expandable index for use by existing buckets without changing the number of buckets of the index.

DESCRIPTION OF THE RELATED ART

Computer systems and clusters of computer systems utilized by enterprises may employ hardware virtualization. Hardware virtualization generally refers to the creation and use of virtual machines (VM) and the like that emulate computer systems with operating systems. Common advantages of hardware virtualization include greater overall hardware-resource utilization, improved system scalability, and simplifying/centralizing administrative management of the system. Data centers are one type of system that can use virtualization to realize these advantages. Some data center systems virtualize storage, computing, and networking resources. Such systems are sometimes referred to as hyperconverged systems. In such systems, a cluster of nodes or servers may share resources among various VMs running on the nodes.

Some implementations of such systems provide for the virtualization of storage allocation and placement for inline deduplication. This may use an index table that tracks every piece of data written to the system. One implementation of index tables in such systems is a fixed sized hash index table that is divided into a plurality of buckets. The hash index table uses a hash function to map data objects of a particular size into object records to a corresponding bucket within the hash table. For example, each of the buckets of the hash index table may be configured to accept an object record corresponding to a hash value within a particular range.

FIG. 1 illustrates an example structure and update mechanism of a bucket 100 in one current implementation of such a hash index table. As illustrated, each bucket is divided into a fixed numbered of pages (pages 101-105 in this example), each page holding a set of object records on a storage. In this example, pages 101-104 of each bucket are used to store the object records which make up the hash table.

In addition, each bucket 100 maintains an unused page 105 (denoted as “0xF”) as a failure protection during updating of object records on pages. For example, as new groups of object records are created, they may be placed in a temporary cache before being persisted in a non-volatile storage (e.g., a solid state drive) by placing them on page. If the object records were to overwrite records in an existing page location when they are being persisted to the non-volatile storage, this would present the danger of losing or corrupting data if a failure occurs during the transfer. For example, if there were a power failure when only half of the object records were being transferred to the page, there would be no way of knowing which of the object records written to a current page were updated and which were not updated.

To this end, as groups of object records are persisted to the non-volatile storage to update an existing page, they are instead written to an unused page 105. Once this process is completed, a page map (e.g., remapping table) associated with the bucket 100 is updated such that the location of the previously unused page 105 now becomes the location of the updated page and the previous location of the page that was updated becomes the location of the unused page 105. For instance, as illustrated in the example of FIG. 1, when object records are updated in page 101, the updated object records are written to page 105, and the page map is rewritten to make the former location of page 101 the new location of page 105, and the former location of page 105 the new location of page 101. Similarly, when object records are updated in page 103, the updated object records are written to the new location of page 105, and the page map is rewritten to make the former location of page 103 the former location of page 105, and the former location of page 105 the new location of page 103.

BRIEF SUMMARY OF THE DISCLOSURE

Implementations of the disclosure describe an expandable object index including pages that may store object records.

In one embodiment, a non-transitory computer-readable medium may store executable instructions that, when executed by a processor, cause the processor to perform operations of: maintaining an index including a plurality of pages to store a plurality of object records, where the index is divided into a plurality of buckets, where each of the plurality of buckets is associated with one or more of the plurality of pages; maintaining a log correlating a page on which stored object records are written to a location on a physical storage device; and maintaining a listing of a pool of unused pages from the plurality of pages to which the plurality of object records may be written, where the pool of unused pages is shared across all of the buckets.

In implementations, the instructions when executed by the processor, cause the processor to further perform an operation of: upon writing one or more of the plurality of object records to an unused page of the pool of unused pages, updating the log to reflect the writing of the one or more of the plurality of object records to the unused page and a corresponding location on the physical storage device.

In implementations, the log further includes a listing of pages currently associated with each of the buckets.

In implementations, the instructions, when executed by the processor, further cause the processor to perform operations of: selecting one of the unused pages from the pool of unused pages to write an object record; linking the selected page to a bucket of the plurality of buckets by updating the log to associate the page with the bucket; and writing the object record to the selected page.

In implementations, the instructions, when executed by the processor, further cause the processor to perform operations of: unlinking a second page from the bucket, where the selected page is used to update the second page; and adding the second page to the pool of unused pages.

In implementations, the index is a hash index, and each of the buckets is configured to store object records having a hash signature within a corresponding range of hash signatures, where the hash signature identifies a data object associated with the object record.

In implementations, the index is maintained by a virtual machine. The virtual machine may run on a host in a cluster of hosts, and each each of the hosts may include one or more physical storage devices storing data objects corresponding to the plurality of object records.

In implementations, the instructions when executed by the processor, further cause the processor to perform operations of: determining a number of object records to be written to an unused page from the pool of unused pages; comparing the number of object records to be written to the unused page to a threshold; and if the number of object records to be written to the available page exceeds the threshold, writing the one or more object records to the unused page.

In implementations, the instructions, when executed by the processor, further cause the processor to perform operations of: receiving a data object to be stored in a storage drive; hashing the data object to generate a signature; determining if an object record stored in the index contains the signature; if an object record stored in the index contains the signature, performing inline deduplication of the data object; and if no object record stored in the index contains the signature, adding a new object record including the signature to an unused page from the pool of unused pages.

In implementations, the instructions, when executed by the processor, further cause the processor to perform operations of: starting up a host that stores the index in a nonvolatile storage; after starting up the host, scanning the log to detect pages that are presently unused by the plurality of buckets; and after scanning the log, creating the listing of the pool of unused pages.

In implementations, the index may be stored in a nonvolatile storage.

In one embodiment, a method includes: maintaining an index including a plurality of pages to store a plurality of object records, where the index is divided into a plurality of buckets, where each of the plurality of buckets is associated with one or more of the plurality of pages; maintaining a data structure correlating a page on which stored object records are written to a location on a physical storage device; and maintaining a listing of a pool of unused pages from the plurality of pages to which the plurality of object records may be written, where the pool of unused pages is shared across all of the buckets.

In one embodiment, a non-transitory computer-readable medium may store executable instructions that, when executed by a processor, cause the processor to perform operations of: determining an existence of additional storage media added to one or more of existing storage media; determining storage capacity of the additional storage media; calculating a number of pages to contain in a partition of the additional storage media based on at least a storage capacity of the storage media, an object size of object records, and a number of object records that are stored on each of the pages; creating the partition of the additional storage media, the additional partition containing the pages; and adding the pages to a pool of unused pages to which object records may be written, where the pool is shared by divisions of a storage index including object records stored on the one or more existing storage media and the additional storage media. The storage index may be divided into a plurality of buckets, each of the plurality of the buckets associated with one or more of a plurality of pages configured to store one or more of a plurality of object records.

In implementations, the number of the plurality of the buckets may not change when adding the additional storage media. Additionally, the bucket and page locations of existing object records may not change when adding the additional storage media.

Other features and aspects of the disclosure will become apparent from the following detailed description, taken in conjunction with the accompanying drawings, which illustrate, by way of example, the features in accordance with various embodiments. The summary is not intended to limit the scope of the invention, which is defined solely by the claims attached hereto.

BRIEF DESCRIPTION OF THE DRAWINGS

The present disclosure, in accordance with one or more various embodiments, is described in detail with reference to the following figures. The drawings are provided for purposes of illustration only and merely depict typical or example embodiments. These drawings are provided to facilitate the reader's understanding of various embodiments and shall not be considered limiting of the breadth, scope, or applicability of the present disclosure. It should be noted that for clarity and ease of illustration these drawings are not necessarily made to scale.

FIG. 1 is a schematic illustrating a current method of page remapping in an index bucket.

FIG. 2 is a block diagram illustrating an example system in which the technology described herein may be implemented.

FIG. 3 is a block diagram illustrating one example implementation of an indexing subsystem.

FIG. 4 is a diagram illustrating an example of a global page remapping index according to some implementations

FIG. 5 is an operational flow diagram illustrating an example method of persisting object records to a page of an index that utilizes a global page remapping log, in accordance with some implementations.

FIG. 6 is an operational flow diagram illustrating an example method to expand an expandable storage index by adding an additional storage media, in accordance with implementations.

FIG. 7 is an operational flow diagram illustrating an example method of rebuilding a global mapping of an unused pool of pages of an index during startup, in accordance with implementations.

FIG. 8 is an example of a computing component that can be used in conjunction with various embodiments of the present disclosure.

The figures are not intended to be exhaustive or to limit various embodiments to the precise form disclosed. It should be understood that various embodiments can be practiced with modification and alteration.

DETAILED DESCRIPTION

As used herein, the term “bucket” generally refers to a division of a storage index. Each bucket may be with associated with a particular range of hashes that may be used to determine in what bucket object records are stored (e.g., based on a hash signature of the object record). A bucket may contain a linked or associated list of page(s) that belong to the bucket.

As used herein to refer to a storage index, the term “page” generally refers to a data container that may store one or more object records that are persisted to a storage drive. A page may be implemented as part of a linked list of pages, an array of pages, or some other data structure.

As noted above, some current implementations of virtualized data centers utilize a fixed-size hash index table that is divided into a number of buckets having a fixed number of pages. A failover mechanism used in such implementations is that each bucket always has an unused page that is used to write page updates. Such indexing systems may have a number of disadvantages.

First, as each bucket is required to always have an unused page, this creates a considerable unused page overhead in the index. These unused pages may significantly increase the total time it takes to load the index, and they may substantially reduce the total available memory space for object records.

Second, when the size of the index needs to be increased (e.g., when additional storage media are added to the system), this fixed bucket size design requires the addition of new buckets, which necessarily requires redistributing the object records across the buckets and pages of the newly sized index.

Implementations of the technology described herein are directed to addressing these and other problems that arise with indices used in data storage systems, including systems that provide virtualized storage allocation and deduplication. In particular, implementations described herein are directed to an expandable object index that utilizes a global page remapping table or log shared across all index buckets. In accordance with implementations described herein, the global page remapping table may maintain a dynamic list of all unused pages as well as all current pages associated with buckets (e.g., which bucket a used page currently belongs to). By virtue of this configuration, pages may be allocated as needed to any bucket. As such, each bucket no longer has a fixed number of preallocated pages. Additionally, bucket sizes of an index may be expanded as needed (e.g., if additional storage is added to the system) without having to redistribute all object records across the expanded index.

Before describing implementations of the expandable object index described herein, it is instructive to describe an example data virtualization system in which it may be implemented. FIG. 2 is a schematic block diagram illustrating one such example. The expandable system includes a plurality of host machines or hosts 200-1 to 200-N (referred to as “hosts 200”) grouped into clusters 250-1 and 250-2 (referred to as “clusters 250”) that share host resources (e.g., computing and memory resources) that may be allocated to running VMs.

Each host 200 may be implemented as a physical server (e.g., a server having an x86 or x64 architecture) or other suitable computing device. Each host 200 can provide computing and memory resources that may be allocated to VMs 220, 230 and/or shared with other hosts 200 in cluster 250. For example, a cluster 250 may include two hosts 200 that are implemented as x86 servers having 64 GB of memory and two CPUs running at 10 GHz. Cluster 250 may have an aggregate of 128 GB of memory and 20 GHz of computing power that may be allocated to running VMs 220, 230 on hosts 200 therein. During operation of a cluster 250, the resources allocated to VMs 220, 230 running on one or more hosts 200 in the cluster 250 may be dynamically adjusted depending on the needs of the hosts. In implementations, resource pools may be partitioned and assigned to one or more VMs 220, 230 within the hosts in any suitable manner (e.g., based on an enterprise's departmental needs).

The data virtualization system of FIG. 2 may be implemented as a hyperconverged data center that provides functions such as data management, data deduplication, data compression, data optimization, data backup, data restore, data cloning, etc. For instance, VM data may be written simultaneously to two hosts 200 within cluster 250 to provide a failover mechanism for restarting VMs of a failed host and/or providing a VM data backup. As another example, VM data may be moved from one host to another host.

Although the data virtualization system of FIG. 2 embodies a multi-cluster system, in other implementations, the technology described herein may be implemented in systems having a single cluster of hosts. Additionally, although each cluster 250 in this example is illustrated as having multiple hosts 200, in other implementations, the technology described herein may be implemented in clusters 250 having single hosts 200. In some implementations, the technology described herein may be implemented in individual hosts 200 that are not part of a (shared resource) cluster.

Each host 200 may include a hypervisor 210 and hardware components such as storage drives 201 (e.g., a RAID storage having a number of hard disk drives (HDD) and/or solid state drives (SSD)), baseboard management controller (BMC) 202, memory 203 (e.g., RAM, ROM, flash, etc.), one or more processors 204, and a network interface 205 to communicate over a network (e.g., with other hosts or with the Internet over a TCP/IP network). Object record data written to host 200 may first be stored in a memory 203. This stored data may be divided into a subset of data, referred to as “dirty records.” When the number of dirty records exceeds a threshold, the dirty records may be persisted to storage drives 201. In some implementations, an expandable hash index is stored in memory 203.

Hypervisor 210 may be configured to create and/or run one or more guest VMs 230 and virtual controller VM 220 (referred to herein as “VC VM” or “VC”). It may be implemented as software, firmware, and/or hardware. In particular implementations, hypervisor 210 may be implemented as VMWARE ESX/ESXi, XEN, HYPER-V, or some other suitable hypervisor for creating and running VMs.

In the example system of FIG. 2, a VM management server 270 may provide a centralized management application to connect to and manage hosts 200 (e.g., provision resources), including hosted VMs 230, and for performing other related functions. The centralized management application may provide a graphical user interface (GUI) that allows a user to manage individual nodes, clusters of nodes, or all nodes. In particular implementations, VM management server 270 may be implemented with vCenter® or SCVMM.® In the system illustrated by FIG. 2, admin workstation 260 may access VM management server 270 to connect to and manage hosts 200. In other implementations (e.g., in implementations having only a few VMs/single hosts), an admin workstation 260 may directly connect to and manage host(s) and VM(s) without a VM management server.

In this example system, VC 220 is a VM configured to run file management software 222 (e.g., by a hardware processor executing machine readable instructions stored on a non-transitory computer readable medium) that may be used to perform a variety of processes relating to file management on one host or a plurality of hosts on a cluster. For example, file management software 220 may be configured to perform processes such as deduplicating data, managing an expandable storage index, managing access by VMs 130 to storage drives 101, providing dynamic resource sharing, moving VM data between storage drives 101, etc. These functions may be performed with respect to VMs 230 currently running on the host 200 and/or all VMs 230 running on hosts belonging to the same duster 250. In particular implementations, VC 220 may be implemented using HPE OmniStack.®

By way of example, data deduplication may be performed by file management software 222 as follows. As data is stored on storage drives 201, the data may be divided into a plurality of subsets of data (e.g., data objects) and hashed to create object records that may be stored in a RAM (e.g., memory 203) as “dirty” object records. Each of the plurality of dirty object records which are stored in memory 203 may be persisted to a storage drive 201 on a page associated with an index, further described below. While this process is performed, file management software 222 may also run a deduplication process to determine that the plurality of subsets of data have not already been saved to storage drives 201. This may be accomplished by determining if a bucket of the index holds an object record containing the same signature as a signature generated from hashing a data subset. If the object record is not already contained, it may be added to a page and inline deduplication of the associated data object may not be performed. If the object record is already present in a bucket, inline deduplication of the associated data object may be performed.

Additionally, the existing object record may be updated. For example, a reference count of the object record that tracks the number of times an associated data object has been used may be incremented.

In this example, file management software 222 comprises an indexing subsystem 300 that may be used to manage an expandable global index, perform data deduplication, and/or perform other related functions. FIG. 3 is a block diagram illustrating one example implementation of an indexing subsystem 300. As illustrated, indexing subsystem 300 may communicatively couple to a file system 350 from which it receives object data. Indexing subsystem 300 may include an object store 310 having an expandable index 400, a volume manager 302, a log manager 304 and input/output (I/O) manager 306.

During operation, object store 310 may be configured to manage data objects, data object deduplication, and the mapping of object signatures (e.g., hashes) to storage addresses in storage drives 201. For example, when file system 350 asks to retrieve an object from a storage drive 201 based on a signature of the object, object store 310 may use expandable index 400 to translate that signature to a storage address in a storage drive 201, and request the object from a volume manager 302 using the storage address. Object store 310 may also receive object record data (e.g., dirty records) to be persisted to a non-volatile storage drive 201 from a memory (e.g., a DRAM). For example, a component of file management software 222 may manage the operation of creating a plurality of object records by hashing one or more data objects.

Each object record may include an object signature (e.g., hash of object) and a storage address associated with the object. In some implementations, each object record may also include a reference count that tracks the number of times a data object associated with an object record has been accessed. In some implementations, the size of all object records may be the same (e.g., each object record may have a signature that is the same size for all records).

Expandable index 400 may be configured to map object records of data objects and/or metadata objects (e.g., object records created by hashing the respective object) to storage addresses on storage drives 201. The expandable index 400 may comprise a plurality of pages configured to store one or more of the plurality of object records. The index may be divided into a plurality of buckets, which as further described below, may be dynamically associated with one or more of the plurality of pages. Stated differently, the number of pages associated with each bucket is not fixed and may be dynamically adjusted. During indexing of an object record, an object record may be assigned to a particular one of the buckets depending on the hash of the record.

Volume manager 302 may determine a storage allocation of one or more storage drives 201. For example, before a new object record is written to a storage drive 201, volume manager 302 may reserve a virtual block address (VBA), that represents an entry in a log managed by log manager 304.

Log manager 304 may be used by both object store 310 and volume manager 302 to persist data structure updates, including managing the persistence of page mapping of index pages that contain object records. It may manage a global log or mapping table that may keep track of a pool of unused pages of the index 400. The pool of unused pages of the index may be associated with any of the buckets of the index 400. The pool of unused pages, in some implementations, may include unused pages partitioned from additional storage media added to storage drives 201.

The global log used to track unused pages may also be used to track current associations between pages and buckets. Alternatively, a separate log may be used to track current associations between pages and buckets. By virtue of using a global page remapping log or table that may be shared across all index buckets, bucket sizes may be dynamically adjusted by adding or removing page associations.

I/O manager 306 may be used to manage input/output communications between indexing subsystem 300 and storage drives 201.

FIG. 4 is a diagram illustrating an example implementation of an expandable index 400. As illustrated, index 400 is divided into a plurality of buckets 410-1 to 410-N (individually referred to as a bucket 410), each of which may be dynamically associated with or linked to one or more pages 420-1 to 420-N (individually referred to as a page 420) that store object records. For example, bucket 410-1 and bucket 410-2 may be linked to a different number of pages.

In this example, one or more logs 430 may maintain the associations between buckets 410-1 to 410-N and pages 420-1 to 420-N. For example, for a log entry corresponding to a bucket 410, the entry may contain page identifiers identifying pages that the bucket 410 points to or is otherwise linked to. For each page 420, the entry may also correlate a storage address on a storage drive 446 or 448 to the page 420. For example, it may contain a mapping of a page identifier to a storage logical block address (LBA). In some implementations, one log is associated with each storage drive.

In addition, the one or more logs 430 may be used to maintain a pool of unused pages of the index 400. The pool of unused pages of the index may be associated with any of the buckets of the index 400 as needed (e.g., as new object records are created and written to pages or as objected records are updated). In some implementations, the one or more logs 430 may be used to generate a list or global mapping table of the pool of unused pages.

Each page 420 may store object record(s) 425-1 to 425-N (individually referred to as object records 425) and include a filter 414. The filter may be used during a deduplication or search function to determine which page a particular record is located at. An object record 425 may include an object signature (e.g., hash), a reference count and a storage address. The reference count may keep count of the number of times the respective object record has been accessed for file management. For example, if the reference count falls below an access threshold, the object record may be deleted from the index.

FIG. 5 is an operational flow diagram illustrating an example method 500 of persisting object records to a page of an index that utilizes a global page remapping log, in accordance with some implementations. For example, when a number of object records stored in a RAM exceed a threshold, file management software 222 may perform method 500 to persist the object records from RAM to a page on a nonvolatile storage. It should be appreciated that method 500 may be implemented using an expandable index (e.g., index 400) that is divided into a plurality of buckets and comprises a plurality of pages that may be dynamically allocated to the buckets.

In implementations, method 500 may be implemented by hardware or a combination of hardware and programming, such as executable instructions stored on a machine readable medium and executed by a processor. In an example, method 500 may be implemented by one or more components of file management software 222, including indexing subsystem 300.

At operation 502, an indexing subsystem (e.g., indexing subsystem 300) may maintain a listing of a pool of unused pages of an index from the plurality of pages to which the plurality of object records may be written, and/or a listing of pages currently associated with buckets. For example, the listing of pages currently associated with buckets may identify what pages each bucket points to. In implementations, one or more logs (e.g., logs 430) may be used to maintain the listing of the pool of unused pages and/or the listing of pages currently associated with buckets. Additionally, the one or more logs may correlate a storage address on a storage drive to each page. In other implementations, other data structures may be used to maintain a listing of a pool of unused pages from the plurality of pages to which the plurality of object records may be written, and/or a listing of pages currently associated with buckets.

In some implementations, the listing of a pool of unused pages from the plurality of pages may be maintained in a separate data structure than the listing of pages currently associated with buckets. For example, the listing of pages currently associated with buckets may be persisted in a log whereas the pool of unused pages is not persisted in the log.

At operation 504, a page may be selected from the pool of unused pages to write one or more object records.

At operation 506, the selected page may be linked to a bucket of the index by updating the one or more logs to identify the selected page as a page that the bucket points to. In implementations where the selected page is used to update another page (e.g., a “second page”) that was previously linked to the bucket, the one or more logs may be updated to reflect that the second page is no longer linked to the bucket. For example, a log entry identifying the second page as a page that the bucket points to may be overwritten to instead identify the newly selected page.

At operation 508, the one or more object records may be written to the selected page. For example, the one or more object records may be written to a storage address corresponding to a page on the disk. At operation 510, after the one or more object records are written to the selected page, the new mapping of the bucket to the selected page may be committed to persist the new mapping. In implementations where the selected page was used to update the second page, at optional operation 512 the second page may be added to the pool of unused pages (i.e., the listing of the pool of unused pages in the one or more logs may be updated).

FIG. 6 is an operational flow diagram illustrating an example method 600 to expand an expandable storage index (e.g., expandable index 400) by adding an additional storage media, in accordance with implementations. In implementations, method 600 may be implemented by hardware or a combination of hardware and programming, such as executable instructions stored on a machine readable medium and executed by a processor. In an example, method 600 may be implemented by one or more components of file management software 222, including indexing subsystem 300.

At operation 602, it may be determined that an additional storage media (e.g., a RAID storage having a number of hard disk drives (HDD) and/or solid state drives (SSD)) has been added to the one or more existing storage media of storage drives 201.

At operation 604, the storage capacity of the additional storage media may be determined.

At operation 606, the number of pages to contain in a partition of the storage media may be calculated. For example, file management software 222 may determine the number of objects that can be stored in the additional storage media by dividing the storage capacity of the storage media by the size of objects, and multiplying the quotient by a compression ratio. In particular implementations, the size of objects may vary between 1 KiB and 64 KiB. In implementations, the compression ratio may be user selectable. In particular implementations, the compression ratio may be between 1.5 and 2.5 In some implementations, the compression ratio and size of objects of the additional storage media may be different from the existing storage media of storage drives 201. The number of pages may be determined by dividing the determined number of objects by the number of object records that are stored per page.

At operation 610, the number of determined pages may be partitioned from the additional storage media. In some implementations, the number of pages determined at operation 608 are added to existing buckets of the existing storage media.

At operation 612, the available pages of the new index are added to the pool of available pages. In various implementations, the number of buckets in the expandable storage index of the existing storage media does not change with the addition of the new pages partitioned from the additional storage media. Rather, the size of the existing buckets may be increased by allocating additional pages from the pool of unused pages. By virtue of this, the storage index may be expanded without rehashing and redistributing object records in buckets of the index.

FIG. 7 is an operational flow diagram illustrating an example method of rebuilding a global mapping of an unused pool of pages of an index during startup, in accordance with implementations. In implementations, method 700 may be implemented by hardware or a combination of hardware and programming, such as executable instructions stored on a machine readable medium and executed by a processor. In an example, method 700 may be implemented by one or more components of file management software 222, including indexing subsystem 300.

At operation 702, a host 100 or virtual machine of the host 100 may start up. The started up host 100 may include one or more nonvolatile storages that store an index (e.g., index 400) including a plurality of pages. Additionally, the nonvolatile storage my store one or more logs (e.g., logs 430) maintaining a mapping between buckets and pages. At operation 704, an index page map (e.g., one or more logs 430) may be scanned to detect pages that are not currently mapped to buckets. At operation 706, the detected pages may be used to create a list or global mapping table including a pool of unused pages that may be assigned to any bucket of the index.

While implementations described herein have been primarily described in the context of using storage indices in hyperconverged or virtualized data storage systems, it should be appreciated that the technology described herein may be implemented in any of storage device or storage device array that utilizes an index that is divided into buckets.

FIG. 8 illustrates an example computing component 800 that may be used to implement various features of the methods disclosed herein. Computing component 800 may represent, for example, computing or processing capabilities found within desktops and laptops; hand-held computing devices (tablets, smartphones, etc.); mainframes, supercomputers, workstations or servers; or any other type of special-purpose or general-purpose computing devices as may be desirable or appropriate for a given application or environment. Computing component 800 might also represent computing capabilities embedded within or otherwise available to a given device. For example, a computing component might be found in other electronic devices such as, for example, routers, gateways, modems, WAPs, terminals and other electronic devices that might include some form of processing capability.

Computing component 800 might include, for example, one or more processors, controllers, control components, or other processing devices, such as a processor 804. Processor 804 might be implemented using a general-purpose or special-purpose processing engine such as, for example, a microprocessor, controller, or other control logic. In the illustrated example, processor 804 is connected to a bus 802, although any communication medium can be used to facilitate interaction with other components of computing component 800 or to communicate externally.

Computing component 800 might also include one or more memory components, simply referred to herein as main memory 808. For example, preferably random access memory (RAM) or other dynamic memory, might be used for storing information and instructions to be executed by processor 804. Main memory 808 might also be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 804. Computing component 800 might likewise include a read only memory (“ROM”) or other static storage device coupled to bus 802 for storing static information and instructions for processor 804.

The computing component 800 might also include one or more various forms of information storage mechanism 810, which might include, for example, a media drive 812 and a storage unit interface 820. The media drive 812 might include a drive or other mechanism to support fixed or removable storage media 814. For example, a hard disk drive, a solid state drive, an optical disk drive, a CD, DVD, or BLU-RAY drive (R or RW), or other removable or fixed media drive might be provided. Accordingly, storage media 814 might include, for example, a hard disk, a solid state drive, cartridge, optical disk, a CD, a DVD, a BLU-RAY, or other fixed or removable medium that is read by, written to or accessed by media drive 812. As these examples illustrate, the storage media 814 can include a computer usable storage medium having stored therein computer software or data.

In alternative embodiments, information storage mechanism 810 might include other similar instrumentalities for allowing computer programs or other instructions or data to be loaded into computing component 800. Such instrumentalities might include, for example, a fixed or removable storage unit 822 and an interface 820. Examples of such storage units 822 and interfaces 820 can include a program cartridge and cartridge interface, a removable memory (for example, a flash memory or other removable memory component) and memory slot, a PCMCIA slot and card, and other fixed or removable storage units 822 and interfaces 820 that allow software and data to be transferred from the storage unit 822 to computing component 800.

Computing component 800 might also include a communications interface 824. Communications interface 824 might be used to allow software and data to be transferred between computing component 800 and external devices. Examples of communications interface 824 might include a modem or softmodem, a network interface (such as an Ethernet, network interface card, WiMedia, IEEE 802.XX or other interface), a communications port (such as for example, a USB port, IR port, RS232 port Bluetooth® interface, or other port), or other communications interface. Software and data transferred via communications interface 824 might typically be carried on signals, which can be electronic, electromagnetic (which includes optical) or other signals capable of being exchanged by a given communications interface 824. These signals might be provided to communications interface 824 via a channel 828. This channel 828 might carry signals and might be implemented using a wired or wireless communication medium. Some examples of a channel might include a phone line, a cellular link, an RF link, an optical link, a network interface, a local or wide area network, and other wired or wireless communications channels.

In this document, the terms “computer readable medium”, “computer usable medium” and “computer program medium” are used to generally refer to non-transitory mediums, volatile or non-volatile, such as, for example, memory 808, storage unit 822, and media 814. These and other various forms of computer program media or computer usable media may be involved in carrying one or more sequences of one or more instructions to a processing device for execution. Such instructions embodied on the medium, are generally referred to as “computer program code” or a “computer program product” (which may be grouped in the form of computer programs or other groupings). When executed, such instructions might enable the computing component 800 to perform features or functions of the present application as discussed herein.

Although described above in terms of various exemplary embodiments and implementations, it should be understood that the various features, aspects and functionality described in one or more of the individual embodiments are not limited in their applicability to the particular embodiment with which they are described, but instead can be applied, alone or in various combinations, to one or more of the other embodiments of the application, whether or not such embodiments are described and whether or not such features are presented as being a part of a described embodiment. Thus, the breadth and scope of the present application should not be limited by any of the above-described exemplary embodiments.

Terms and phrases used in this document, and variations thereof, unless otherwise expressly stated, should be construed as open ended as opposed to limiting. As examples of the foregoing: the term “including” should be read as meaning “including, without limitation” or the like; the term “example” is used to provide exemplary instances of the item in discussion, not an exhaustive or limiting list thereof; the terms “a” or “an” should be read as meaning “at least one,” “one or more” or the like; and adjectives such as “conventional,” “traditional,” “normal,” “standard,” “known” and terms of similar meaning should not be construed as limiting the item described to a given time period or to an item available as of a given time, but instead should be read to encompass conventional, traditional, normal, or standard technologies that may be available or known now or at any time in the future. Likewise, where this document refers to technologies that would be apparent or known to one of ordinary skill in the art, such technologies encompass those apparent or known to the skilled artisan now or at any time in the future.

The presence of broadening words and phrases such as “one or more,” “at least,” “but not limited to” or other like phrases in some instances shall not be read to mean that the narrower case is intended or required in instances where such broadening phrases may be absent.

Additionally, the various embodiments set forth herein are described in terms of exemplary block diagrams, flow charts and other illustrations. As will become apparent to one of ordinary skill in the art after reading this document, the illustrated embodiments and their various alternatives can be implemented without confinement to the illustrated examples. For example, block diagrams and their accompanying description should not be construed as mandating a particular architecture or configuration.

While various embodiments of the present disclosure have been described above, it should be understood that they have been presented by way of example only, and not of limitation. Likewise, the various diagrams may depict an example architectural or other configuration for the disclosure, which is done to aid in understanding the features and functionality that can be included in the disclosure. The disclosure is not restricted to the illustrated example architectures or configurations, but the desired features can be implemented using a variety of alternative architectures and configurations. Indeed, it will be apparent to one of skill in the art how alternative functional, logical or physical partitioning and configurations can be implemented to implement the desired features of the present disclosure. Also, a multitude of different constituent module names other than those depicted herein can be applied to the various partitions. Additionally, with regard to flow diagrams, operational descriptions and method claims, the order in which the steps are presented herein shall not mandate that various embodiments be implemented to perform the recited functionality in the same order unless the context dictates otherwise.

Although the disclosure is described above in terms of various exemplary embodiments and implementations, it should be understood that the various features, aspects and functionality described in one or more of the individual embodiments are not limited in their applicability to the particular embodiment with which they are described, but instead can be applied, alone or in various combinations, to one or more of the other embodiments of the disclosure, whether or not such embodiments are described and whether or not such features are presented as being a part of a described embodiment. Thus, the breadth and scope of the present disclosure should not be limited by any of the above-described exemplary embodiments. 

What is claimed is:
 1. A non-transitory computer-readable medium having executable instructions stored thereon that, when executed by a processor, cause the processor to perform operations of: maintaining an index comprising a plurality of pages to store a plurality of object records, wherein the index is divided into a plurality of buckets, wherein each of the plurality of buckets is associated with one or more of the plurality of pages; maintaining a log correlating a page on which stored object records are written to a location on a physical storage device; and maintaining a listing of a pool of unused pages from the plurality of pages to which the plurality of object records may be written, wherein the pool of unused pages is shared across all of the buckets.
 2. The non-transitory computer-readable medium of claim 1, wherein the instructions when executed by the processor, cause the processor to further perform an operation of: upon writing one or more of the plurality of object records to an unused page of the pool of unused pages, updating the log to reflect the writing of the one or more of the plurality of object records to the unused page and a corresponding location on the physical storage device.
 3. The non-transitory computer-readable medium of claim 1, wherein the log further comprises a listing of pages currently associated with each of the buckets.
 4. The non-transitory computer-readable medium of claim 3, wherein the instructions, when executed by the processor, further cause the processor to perform operations of: selecting one of the unused pages from the pool of unused pages to write an object record; linking the selected page to a bucket of the plurality of buckets by updating the log to associate the page with the bucket; and writing the object record to the selected page.
 5. The non-transitory computer-readable medium of claim 4, wherein the instructions, when executed by the processor, further cause the processor to perform operations of: unlinking a second page from the bucket, wherein the selected page is used to update the second page; and adding the second page to the pool of unused pages.
 6. The non-transitory computer-readable medium of claim 1, wherein the index is a hash index, wherein each of the buckets is configured to store object records having a hash signature within a corresponding range of hash signatures, wherein the hash signature identifies a data object associated with the object record.
 7. The non-transitory computer-readable medium of claim 1, wherein the index is maintained by a virtual machine.
 8. The non-transitory computer-readable medium of claim 8, wherein the virtual machine runs on a host in a cluster of hosts, wherein each of the hosts comprises one or more physical storage devices storing data objects corresponding to the plurality of object records.
 9. The non-transitory computer-readable medium of claim 1, wherein the instructions when executed by the processor, further cause the processor to perform operations of: determining a number of object records to be written to an unused page from the pool of unused pages; comparing the number of object records to be written to the unused page to a threshold; and if the number of object records to be written to the available page exceeds the threshold, writing the one or more object records to the unused page.
 10. The non-transitory computer-readable medium of claim 1, wherein the instructions, when executed by the processor, further cause the processor to perform operations of: receiving a data object to be stored in a storage drive; hashing the data object to generate a signature; determining if an object record stored in the index contains the signature; if an object record stored in the index contains the signature, performing inline deduplication of the data object; and if no object record stored in the index contains the signature, adding a new object record including the signature to an unused page from the pool of unused pages.
 11. The non-transitory computer-readable medium of claim 3, wherein the instructions, when executed by the processor, further cause the processor to perform operations of: starting up a host that stores the index in a nonvolatile storage; after starting up the host, scanning the log to detect pages that are presently unused by the plurality of buckets; and after scanning the log, creating the listing of the pool of unused pages.
 12. A system, comprising: a processor; a non-transitory computer-readable medium having executable instructions stored thereon that, when executed by the processor, cause the processor to perform operations of: maintaining an index comprising a plurality of pages to store a plurality of object records, wherein the index is divided into a plurality of buckets, wherein each of the plurality of buckets is associated with one or more of the plurality of pages; maintaining a log correlating a page on which stored object records are written to a location on a physical storage device; and maintaining a listing of a pool of unused pages from the plurality of pages to which the plurality of object records may be written, wherein the pool of unused pages is shared across all of the buckets.
 13. The system of claim 12, further comprising: a nonvolatile storage storing the index.
 14. The system of claim 12, wherein the log further comprises a listing of pages currently associated with each of the buckets.
 15. The system of claim 14, wherein the instructions, when executed by the processor, further cause the processor to perform operations of: selecting one of the unused pages from the pool of unused pages to write an object record; linking the selected page to a bucket of the plurality of buckets by updating the log to associate the page with the bucket; and writing the object record to the selected page.
 16. A non-transitory computer-readable medium having executable instructions stored thereon that, when executed by a processor, cause the processor to perform operations of: determining an existence of additional storage media added to one or more of existing storage media; determining storage capacity of the additional storage media; calculating a number of pages to contain in a partition of the additional storage media based on at least a storage capacity of the storage media, an object size of object records, and a number of object records that are stored on each of the pages; creating the partition of the additional storage media, the additional partition containing the pages; and adding the pages to a pool of unused pages to which object records may be written, wherein the pool is shared by divisions of a storage index including object records stored on the one or more existing storage media and the additional storage media.
 17. The non-transitory computer-readable medium of claim 16, wherein the index is maintained by a virtual machine.
 18. The non-transitory computer-readable medium of claim 16, wherein the storage index is divided into a plurality of buckets, each of the plurality of the buckets associated with one or more of a plurality of pages configured to store one or more of a plurality of object records.
 19. The non-transitory computer-readable medium of claim 18, wherein the number of the plurality of the buckets does not change when adding the additional storage media.
 20. The non-transitory computer-readable medium of claim 19, wherein the bucket and page locations of existing object records do not change when adding the additional storage media. 